Segues এবং View Controllers এর মধ্যে Data Passing iOS ডেভেলপমেন্টে খুবই গুরুত্বপূর্ণ একটি বিষয়। যখন একটি অ্যাপ্লিকেশনে এক ভিউ কন্ট্রোলার থেকে আরেক ভিউ কন্ট্রোলারে নেভিগেট করা হয়, তখন অনেক সময় ডেটা পাস করার প্রয়োজন হয়। এই প্রক্রিয়ায় Segues এবং prepare(for:sender:) মেথড ব্যবহার করা হয়।
Segues কী?
- Segue হলো একটি ট্রানজিশন যা এক ভিউ কন্ট্রোলার থেকে আরেক ভিউ কন্ট্রোলারে নেভিগেট করে। Interface Builder-এ Storyboard-এর মাধ্যমে Segue যুক্ত করা হয়।
- Segue গুলো সাধারণত Show, Modal, এবং Popover এর মতো ভিউ ট্রানজিশনের ধরন সমর্থন করে।
- Segue যুক্ত করার জন্য Control কী ধরে একটি ভিউ কন্ট্রোলার বা UI এলিমেন্ট থেকে আরেকটি ভিউ কন্ট্রোলারে ড্র্যাগ করা হয় এবং একটি Segue তৈরি করা হয়।
Segue-এর মাধ্যমে View Controllers এর মধ্যে Data Passing
prepare(for:sender:) মেথড ব্যবহার করে একটি Segue-এর মাধ্যমে ডেটা পাস করা হয়। এটি স্বয়ংক্রিয়ভাবে কল হয় যখন একটি Segue এক্সিকিউট হয়।
Source View Controller থেকে Destination View Controller-এ ডেটা পাঠাতে prepare(for:sender:) মেথডে ডেস্টিনেশন ভিউ কন্ট্রোলারের একটি রেফারেন্স পাওয়া যায় এবং সেখানে ডেটা সেট করা হয়।
উদাহরণ: Segue-এর মাধ্যমে Data Passing
ধরা যাক, আমাদের একটি FirstViewController আছে যেটি একটি SecondViewController-এ নেভিগেট করছে এবং আমরা ডেটা পাস করতে চাই।
Step ১: Storyboard-এ Segue তৈরি করা
- Storyboard-এ গিয়ে FirstViewController থেকে SecondViewController-এ একটি Segue যুক্ত করুন। এটি Show Segue বা Modal Segue হতে পারে।
- Segue-টির Identifier সেট করুন (যেমন:
"showSecondVC"), যাতে আমরা কোডে এটি চিনতে পারি।
Step ২: prepare(for:sender:) মেথডে ডেটা পাস করা
FirstViewController.swift ফাইলে prepare(for:sender:) মেথড ওভাররাইড করে ডেটা পাস করা যায়:
class FirstViewController: UIViewController {
var dataToPass: String = "Hello from FirstViewController"
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Segue আইডেন্টিফায়ার চেক করা
if segue.identifier == "showSecondVC" {
// ডেস্টিনেশন ভিউ কন্ট্রোলারের রেফারেন্স পাওয়া
if let destinationVC = segue.destination as? SecondViewController {
// ডেটা পাস করা
destinationVC.receivedData = dataToPass
}
}
}
}
- এখানে, prepare(for:sender:) মেথডে আমরা চেক করেছি যে Segue-এর identifier
"showSecondVC"কিনা, তারপর আমরা SecondViewController-এ ডেটা পাস করেছি।
Step ৩: ডেস্টিনেশন ভিউ কন্ট্রোলারে ডেটা রিসিভ করা
SecondViewController.swift ফাইলে একটি ভ্যারিয়েবল তৈরি করুন যাতে ডেটা রিসিভ করা যাবে:
class SecondViewController: UIViewController {
var receivedData: String?
override func viewDidLoad() {
super.viewDidLoad()
// ডেটা প্রিন্ট করা বা UI আপডেট করা
if let data = receivedData {
print(data) // Output: Hello from FirstViewController
}
}
}
- এখানে, আমরা একটি receivedData ভ্যারিয়েবল তৈরি করেছি যেখানে প্রথম ভিউ কন্ট্রোলার থেকে পাঠানো ডেটা সংরক্ষিত হবে।
Button বা Cell থেকে Segue Trigger করা (IBAction বা didSelectRowAt ব্যবহার করে)
- IBAction: যদি কোনো বাটন থেকে Segue ট্রিগার করতে চাও, তাহলে সেটি Storyboard-এ Control-drag করে Segue তৈরি করে নিতে পারো।
- didSelectRowAt: যদি একটি UITableView এর কোনো সেল থেকে Segue ট্রিগার করতে হয়, তাহলে didSelectRowAt মেথড ব্যবহার করে performSegue(withIdentifier:sender:) মেথড কল করা যায়:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "showSecondVC", sender: self)
}
Segue ছাড়াও Programmatically Data Passing (Delegates এবং Closures)
- Delegation Pattern: দ্বিতীয় ভিউ কন্ট্রোলার থেকে ডেটা ফেরত পেতে Delegate প্যাটার্ন ব্যবহার করা যায়।
- Closures: ডেটা পাস করার জন্য Closures ব্যবহার করে কলব্যাক তৈরি করা যায়।
উপসংহার
- Segues ব্যবহার করে iOS অ্যাপে ভিউ কন্ট্রোলারগুলোর মধ্যে সহজে ডেটা পাস করা যায়।
- prepare(for:sender:) মেথডে Segue এর identifier ব্যবহার করে ডেস্টিনেশন ভিউ কন্ট্রোলার চিহ্নিত করা এবং ডেটা পাস করা হয়।
- যদি অ্যাপের লজিক আরও ডাইনামিক হয়, তবে Delegates এবং Closures এর মত আরও উন্নত পদ্ধতিও ব্যবহার করা যেতে পারে।
Read more